home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / helper / source / scrn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-08  |  11.6 KB  |  361 lines

  1. /*
  2.  
  3. 01234567890123456789012345678901234567890123456789012345678901234567890123456789--------------------------------------------------------------------------------|                                                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx| 条件くりあっ☆  見たいなぁ○  印刷しませう(^_^)  こぴっちゃお(^_^;  またねっ♪
  4.  もどろ~ねっ☆
  5. --------------------------------------------------------------------------------|                        お好みのメニュ-をどうぞ                              |                                   なにがいい?
  6. |xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------|          作    品    名           ||         作    者    名        ||TMBD|--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆|
  7. 0      1         2         3         4         5         6         7
  8. 01234567890123456789012345678901234567890123456789012345678901234567890123456789|               作    品    名                ||         作    者    名        |               た・い・と・る                           つくったひと☆
  9. --------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 0123 プログラムがあるよ     | 前  項 | | 次  項 | 
  10.        作品あるよっ♪            まえ      うしろ
  11. --------------------------------------------------------------------------------
  12. *********************/
  13.  
  14. #include    <stdio.h>
  15. #include    <stdlib.h>
  16. #include    <stdarg.h>
  17. #include    <mos.h>
  18. #include    "keyword.h"
  19. #include    "graphic.h"
  20. #include    "scrn.h"
  21. #include    "coldef.h"
  22. #include    "bitmap.h"
  23.  
  24. #define    MSG_X        (38*8)
  25. #define    MSG_Y        4
  26. #define    MSG_X1        (MSG_X-4)
  27. #define    MSG_Y1        (MSG_Y-2)
  28. #define    MSG_X2        (MSG_X+41*8+3)
  29. #define    MSG_Y2        (MSG_Y+17)
  30.  
  31. #define CLER_X      (1*8)
  32. #define CLER_Y      26
  33. #define    CLER_X1        (CLER_X-4)
  34. #define    CLER_Y1        (CLER_Y-2)
  35. #define    CLER_X2        (CLER_X+14*8+3)
  36. #define    CLER_Y2        (CLER_Y+17)
  37.  
  38. #define LIST_X      (17*8)
  39. #define LIST_Y      26
  40. #define    LIST_X1        (LIST_X-4)
  41. #define    LIST_Y1        (LIST_Y-2)
  42. #define    LIST_X2        (LIST_X+14*8+3)
  43. #define    LIST_Y2        (LIST_Y+17)
  44.  
  45. #define PRNT_X      (33*8)
  46. #define PRNT_Y      26
  47. #define    PRNT_X1        (PRNT_X-4)
  48. #define    PRNT_Y1        (PRNT_Y-2)
  49. #define    PRNT_X2        (PRNT_X+14*8+3)
  50. #define    PRNT_Y2        (PRNT_Y+17)
  51.  
  52. #define INST_X      (49*8)
  53. #define INST_Y      26
  54. #define    INST_X1        (INST_X-4)
  55. #define    INST_Y1        (INST_Y-2)
  56. #define    INST_X2        (INST_X+14*8+3)
  57. #define    INST_Y2        (INST_Y+17)
  58.  
  59. #define EXIT_X      (65*8)
  60. #define EXIT_Y      26
  61. #define    EXIT_X1        (EXIT_X-4)
  62. #define    EXIT_Y1        (EXIT_Y-2)
  63. #define    EXIT_X2        (EXIT_X+14*8+3)
  64. #define    EXIT_Y2        (EXIT_Y+17)
  65.  
  66. #define KEY_X       8
  67. #define KEY_Y       69
  68. #define KEY_L        (18*8)
  69. #define KEY_S        (20*8)
  70. #define KEY_POS_X(n)    ((n%4)*KEY_S+KEY_X)
  71. #define KEY_POS_Y(n)    ((n/4)*23+KEY_Y)
  72.  
  73. #define    PRG_NAME_X  8
  74. #define    PRG_MAKE_X  (47*8)
  75. #define    PRG_BITS_X  (71*8)
  76. #define    PRG_NAME_L  (44*8+6)
  77. #define    PRG_MAKE_L  (31*8+6)
  78. #define    PRG_BITS_L  (8*8)
  79. #define    PRG_Y        252
  80. #define PRG_POS_Y(n)    ((n)*23+PRG_Y)
  81.  
  82. #define    MSG2_X        (1*8)
  83. #define    MSG2_Y        460
  84.  
  85. #define    BACK_X        (29*8)
  86. #define    BACK_Y        460
  87. #define    BACK_X1        (BACK_X-4)
  88. #define    BACK_Y1        (BACK_Y-2)
  89. #define    BACK_X2        (BACK_X+8*8+3)
  90. #define    BACK_Y2        (BACK_Y+17)
  91.  
  92. #define    NEXT_X        (39*8)
  93. #define    NEXT_Y        460
  94. #define    NEXT_X1        (NEXT_X-4)
  95. #define    NEXT_Y1        (NEXT_Y-2)
  96. #define    NEXT_X2        (NEXT_X+8*8+3)
  97. #define    NEXT_Y2        (NEXT_Y+17)
  98.  
  99. static    int    sw_flg[10];
  100.  
  101. int    MOS_stei(int x1,int y1,int x2,int y2)
  102. {
  103.     int     stat=0;
  104.     int     cl,sw,x,y;
  105.  
  106.     for ( ; ; ) {
  107.     MOS_rdpos(&sw,&x,&y);
  108.     if ( x >= x1 && x <= x2 && y >= y1 && y <= y2 )
  109.         cl = 1;
  110.     else
  111.         cl = 0;
  112.  
  113.     switch(stat) {
  114.     case 0:
  115.         if ( cl == 0 || sw == 0 )
  116.         return 0;
  117.         MOS_disp(OFF);
  118.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  119.         MOS_disp(ON);
  120.         stat = 1;
  121.         break;
  122.  
  123.     case 1:
  124.         if ( sw == 0 || cl == 0 ) {
  125.         MOS_disp(OFF);
  126.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  127.         MOS_disp(ON);
  128.             if ( sw == 0 && cl != 0 )
  129.             return 1;
  130.         else
  131.             return 0;
  132.         }
  133.         break;
  134.     }
  135.     }
  136. }
  137. int    MENU_no(int rc)
  138. {
  139.     int     i,sw,x,y;
  140.     static struct {
  141.     int    x1,y1,x2,y2;
  142.     int    no;
  143.     int    *sw;
  144.     } event_tbl[]={
  145.     { CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,CLER_NO,&sw_flg[0] },
  146.     { LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LIST_NO,&sw_flg[1] },
  147.     { PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,PRNT_NO,&sw_flg[2] },
  148.     { INST_X1,INST_Y1,INST_X2,INST_Y2,INST_NO,&sw_flg[3] },
  149.     { EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,EXIT_NO,&sw_flg[4] },
  150.     { BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,BACK_NO,&sw_flg[5] },
  151.     { NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,NEXT_NO,&sw_flg[6] },
  152.     { 0,0,0,0,NON_NO }
  153.     };
  154.  
  155.     MOS_rdpos(&sw,&x,&y);
  156.     if ( sw == 0 )
  157.     return NON_NO;
  158.  
  159.     for ( i = 0 ; event_tbl[i].no != NON_NO ; i++ ) {
  160.     if ( *event_tbl[i].sw != 0 &&
  161.          MOS_stei(event_tbl[i].x1,event_tbl[i].y1,
  162.               event_tbl[i].x2,event_tbl[i].y2) != 0 )
  163.         return event_tbl[i].no;
  164.     }
  165.  
  166.     if ( rc == 0 )
  167.     return NON_NO;
  168.  
  169.     for ( i = 0 ; i < 28 ; i++ ) {
  170.     if ( x >= (KEY_POS_X(i)-4) && y >= (KEY_POS_Y(i)-2) &&
  171.          x <= (KEY_POS_X(i)+KEY_L+3) && y <= (KEY_POS_Y(i)+17) )
  172.         return (KEY_NO + i);
  173.     }
  174.  
  175.     for ( i = 0 ; i < 9 ; i++ ) {
  176.     if ( prg_tbl[i] != NULL &&
  177.          ( MOS_stei(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  178.                   PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17) != 0 ||
  179.            MOS_stei(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  180.                   PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17) != 0 ||
  181.            MOS_stei(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  182.                   PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17) != 0 ) )
  183.         return (PRG_NO+i);
  184.     }
  185.  
  186.     return NON_NO;
  187. }
  188. void    KEY_disp(int no)
  189. {
  190.     MOS_disp(OFF);
  191.     DSP_box(KEY_POS_X(no)-4,KEY_POS_Y(no)-2,
  192.         KEY_POS_X(no)+KEY_L+3,KEY_POS_Y(no)+17,
  193.         8,M_XOR);
  194.     MOS_disp(ON);
  195. }
  196. void    KEY_putstr(int no,char *key)
  197. {
  198.     MOS_disp(OFF);
  199.     gprintf(KEY_POS_X(no),KEY_POS_Y(no),CHR_COL,KEY_COL,"%-18.18s",key);
  200.     MOS_disp(ON);
  201. }
  202. void    PRG_disp(int no,char *prog,char *make,int bits)
  203. {
  204.     MOS_disp(OFF);
  205.     gprintf(PRG_NAME_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-44.44s",prog);
  206.     gprintf(PRG_MAKE_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-31.31s",make);
  207. /*****************************************************************
  208.     gprintf(PRG_BITS_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%s%s%s%s",
  209.     (bits & 1) ? "☆":"  ",
  210.     (bits & 2) ? "☆":"  ",
  211.     (bits & 4) ? "☆":"  ",
  212.     (bits & 8) ? "☆":"  ");
  213. ********************************************************************/
  214.     MOS_disp(ON);
  215. }
  216. void    MSG_disp(char *form,...)
  217. {
  218.     va_list arg;
  219.     char    tmp[256];
  220.  
  221.     va_start(arg,form);
  222.     vsprintf((char *)tmp,form,arg);
  223.     MOS_disp(OFF);
  224.     gputs(MSG_X,MSG_Y,CHR_COL,MENU_COL,tmp);
  225.     MOS_disp(ON);
  226.     va_end(arg);
  227. }
  228. void    MSG2_disp(char *form,...)
  229. {
  230.     va_list arg;
  231.     char    tmp[256];
  232.  
  233.     va_start(arg,form);
  234.     vsprintf((char *)tmp,form,arg);
  235.     MOS_disp(OFF);
  236.     gputs(MSG2_X,MSG2_Y,CHR_COL,PRG_COL,tmp);
  237.     MOS_disp(ON);
  238.     va_end(arg);
  239. }
  240. /***********************************************
  241. void    MENU_mask(int no,int sw)
  242. {
  243.     static struct {
  244.     int    x,y;
  245.     int    back;
  246.     char    *str;
  247.     int    *sw;
  248.     } menu_tbl[]={
  249.     { CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
  250.     { LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
  251.     { PRNT_X,PRNT_Y,MENU_COL,"    PRINT     ",&sw_flg[2] },
  252.     { INST_X,INST_Y,MENU_COL,"   INSTALL    ",&sw_flg[3] },
  253.     { EXIT_X,EXIT_Y,MENU_COL,"     EXIT     ",&sw_flg[4] },
  254.     { BACK_X,BACK_Y,PRG_COL, "  BACK  "      ,&sw_flg[5] },
  255.     { NEXT_X,NEXT_Y,PRG_COL, "  NEXT  "      ,&sw_flg[6] },
  256.     { CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
  257.     { LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
  258.     };
  259.  
  260.     MOS_disp(OFF);
  261.     gputs(menu_tbl[no].x,menu_tbl[no].y,
  262.     sw != 0 ? XCHR_COL:CHR_COL, menu_tbl[no].back,
  263.     menu_tbl[no].str);
  264.     MOS_disp(ON);
  265.     *menu_tbl[no].sw = sw;
  266. }
  267. *********************************************************/
  268. void    MENU_mask(int no,int sw)
  269. {
  270.     static struct {
  271.     int    x,y;
  272.     int    back;
  273.     char    *str;
  274.     int    *sw;
  275.     } menu_tbl[]={
  276.     { CLER_X+28,CLER_Y+3,MENU_COL,cancel_img,&sw_flg[0] },
  277.     { LIST_X+36,LIST_Y+3,MENU_COL,look_img,&sw_flg[1] },
  278.     { PRNT_X+34,PRNT_Y+3,MENU_COL,print_img,&sw_flg[2] },
  279.     { INST_X+28,INST_Y+3,MENU_COL,install_img,&sw_flg[3] },
  280.     { EXIT_X+38,EXIT_Y+3,MENU_COL,exit_img,&sw_flg[4] },
  281.     { BACK_X+14, BACK_Y+3,PRG_COL, back_img,&sw_flg[5] },
  282.     { NEXT_X+14, NEXT_Y+3,PRG_COL, next_img,&sw_flg[6] },
  283.     { CLER_X+28,CLER_Y+3,MENU_COL,cancel_img,&sw_flg[0] },
  284.     { LIST_X+36,LIST_Y+3,MENU_COL,look_img,&sw_flg[1] },
  285.     };
  286.  
  287.     MOS_disp(OFF);
  288.     DSP_strimg(menu_tbl[no].str,
  289.     menu_tbl[no].x,menu_tbl[no].y,
  290.     sw != 0 ? XCHR_COL:CHR_COL, menu_tbl[no].back, M_PSET);
  291.     MOS_disp(ON);
  292.     *menu_tbl[no].sw = sw;
  293. }
  294. void    SCRN_init(void)
  295. {
  296.     int     i;
  297.  
  298.     MOS_disp(OFF);
  299.     DSP_rbox(0,0,639,47,LINE_COL,MENU_COL,M_PSET);    /* Main Menu Back */
  300.     DSP_rbox(0,47,639,230,LINE_COL,KEY_COL,M_PSET);    /* KeyWord Menu Back */
  301.     DSP_rbox(0,230,639,479,LINE_COL,PRG_COL,M_PSET);    /* Prog Menu Back */
  302.  
  303.     DSP_wbox(CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,LINE_COL,MENU_COL,M_PSET);
  304.     DSP_wbox(LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LINE_COL,MENU_COL,M_PSET);
  305.     DSP_wbox(PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,LINE_COL,MENU_COL,M_PSET);
  306.     DSP_wbox(INST_X1,INST_Y1,INST_X2,INST_Y2,LINE_COL,MENU_COL,M_PSET);
  307.     DSP_wbox(EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,LINE_COL,MENU_COL,M_PSET);
  308.  
  309.     DSP_wbox(BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,LINE_COL,PRG_COL,M_PSET);
  310.     DSP_wbox(NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,LINE_COL,PRG_COL,M_PSET);
  311.  
  312.     for ( i = 0 ; i < 28 ; i++ ) {
  313.     DSP_wbox(KEY_POS_X(i)-4,KEY_POS_Y(i)-2,
  314.          KEY_POS_X(i)+KEY_L+3,KEY_POS_Y(i)+17,
  315.          LINE_COL,KEY_COL,M_PSET);
  316.     }
  317.     for ( i = 0 ; i < 9 ; i++ ) {
  318.     DSP_wbox(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  319.          PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,
  320.          LINE_COL,PRG_COL,M_PSET);
  321.     DSP_wbox(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  322.          PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,
  323.          LINE_COL,PRG_COL,M_PSET);
  324. /**********************************************************
  325.     DSP_wbox(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  326.          PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,
  327.          LINE_COL,PRG_COL,M_PSET);
  328. ***********************************************************/
  329.     }
  330.  
  331. /********
  332.     DSP_msg("Free Software Collection Helper",
  333.         8,4,5,ERR_COL,MENU_COL,M_PSET);
  334.     gputs((35*8),50,CHR_COL,KEY_COL,"MEMU SELECT");
  335.     gputs((16*8),232,CHR_COL,PRG_COL,"TITLE");
  336.     gputs((57*8),232,CHR_COL,PRG_COL,"WRITER");
  337. *********/
  338.  
  339.     DSP_strimg(helper_img,
  340.         8, 6, ERR_COL, MENU_COL, M_PSET);
  341.     DSP_strimg(menu_img,
  342.         35 * 8, 53, CHR_COL, KEY_COL, M_PSET);
  343.     DSP_strimg(title_img,
  344.         20 * 8, 235, CHR_COL, PRG_COL, M_PSET);
  345.     DSP_strimg(writer_img,
  346.         60 * 8, 235, CHR_COL, PRG_COL, M_PSET);
  347.  
  348. /******************************************
  349.     gputs((71*8),242,XPRG_COL,PRG_COL,"TMBD");
  350. *******************************************/
  351.     MOS_disp(ON);
  352.  
  353.     MENU_mask(CLER_NO,OFF);
  354.     MENU_mask(LIST_NO,OFF);
  355.     MENU_mask(PRNT_NO,OFF);
  356.     MENU_mask(INST_NO,OFF);
  357.     MENU_mask(EXIT_NO,OFF);
  358.     MENU_mask(BACK_NO,OFF);
  359.     MENU_mask(NEXT_NO,OFF);
  360. }
  361.